7. Añadiendo un toque de Symfony2

Symfony2 al rescate. Antes de poder usar Symfony2, es necesario asegurarse de que PHP sabe donde encontrar las clases de Symfony2. Esto se consigue a través de un "autoloader" que ofrece Symfony, que hace posible emplear clases PHP sin incluir cada uno de los ficheros que contienen la clase.

Primero es necesario descargar Symfony2. Para ello accedemos al sitio web oficial y seguimos las instrucciones. Una vez descargado copiamos la carpeta "vendor" en la raiz de nuestro sitio web.

Una vez tenemos las librerías, creamos una carpeta "app" también la raiz y luego dentro de ella un fichero "bootstrap.php". Este fichero cargará nuestro modelo y los controladores y configurará el autoloader:



Esto le dice al autoloader donde están las clases de Symfony, para poder utilizarlas sin necesidad de emplear "require" para cada fichero que las contiene.

La filosofía de Symfony se basa en la idea de que el objetivo de una aplicación es interpretar cada petición y devolver una respuesta. Para ello, Symfony2 proporciona las clases Request y Response. Estas clases son representaciones basadas en orientación a objetos de las peticiones y respuestas HTTP (e.g., variables $_GET, $_POST, $_SERVER, etc.). Mejoramos ahora el blog empleándolas:



Al añadir una pequeña parte de Symfony2, la aplicación es más flexible y confiable. El objeto Request ofrece una buena manera de acceder a las peticiones HTTP. En concreto, "getPathInfo()" devuelve una URI limpia (devolviendo siempre "/" en lugar de "/index.php" o "/show.php" en lugar de "/index.php/show.php?id=1"). [Prueba a mostrar los valores que devuelven los dos métodos, el antiguo $_SERVER['REQUEST_URI'] y el nuevo $request->getPathInfo()].

De este modo, aunque el usuario vaya a /index.php/show.php, la aplicación es suficientemente inteligente para redirigir la petición a show_action().

Modificamos también en la plantilla de listado de posts (templates/list.php) la línea que enlaza con cada post para adecuarse al nuevo index.php (quitamos ".php" a "/show.php?id"):



Los controladores se encargan ahora de devolver el objeto Response. Para facilitar aún más la codificación, añadimos una nueva función a los controladores, que actúa de manera similar al motor de plantillas de Symfony2, render_template():



Por otro lado, el objeto Response ofrece flexibilidad a la hora de construir la respuesta HTTP, permitiendo añadir cabeceras y contenido mediante una interfaz orientada a objetos. Además, aunque ahora mismo las respuestas que ofrece nuestro blog son muy simples, según vaya creciendo la aplicación aumentarán las ventajas obtenidas al usar esta metodología.

Así, la única tarea del Front Controller es inicializar el motor de Symfony2 (Kernel) y pasarle el objeto Request. Es entonces cuando Symfony2 hace uso del mapa de redirecciones para determinar a que controlador llamar. Al igual que antes, el método del controlador es el encargado de devolver el objeto Response.

A continuación puede verse una representación más visual de cómo gestiona cada petición Symfony2:



Dicho esto, parece buena idea construir "Nuestro blog de ejemplo en Symfony2".

<<6. Un Front Controler al rescate|8. Nuestro blog de ejemplo en Symfony2>>


Manual elaborado por Carlos Laorden para la asignatura Ingeniería Web de la Universidad de Deusto. Referencias empleadas: The Book (Symfony) y Symblog